home *** CD-ROM | disk | FTP | other *** search
- !!VP1.0
-
- # Compute specular and diffuse light from a single source
-
- # c[0]..c[3] contains the concatenation of the modelview and projection matrices.
- # c[4]..c[7] contains the inverse transpose of the modelview
- # c[15] contains the eye position in object space
- # c[16] contains the light direction in object space
- # c[17] contains H, the normalized sum of the eye and light direction
- # c[20] contains the object color * light color
- # c[32] contains the ambient light color
- # c[33] contains the haze color
- # c[34] contains the specular color * light color
- # c[40] contains (0, 1, 0, specPower)
- # v[OPOS] contains the per-vertex position
- # v[NRML] contains the per-vertex normal
- # v[TEX0] contains the per-vertex texture coordinate 0
- # o[HPOS] output register for homogeneous position
- # o[TEX0] output register for texture coordinate 0
- # o[COL0] output register for primary color
- # R0...R11 temporary registers
-
- # Transform the vertex by the modelview matrix
- DP4 R1.x, c[0], v[OPOS];
- DP4 R1.y, c[1], v[OPOS];
- DP4 R1.z, c[2], v[OPOS];
- DP4 R1.w, c[3], v[OPOS];
-
- # Compute the diffuse light component
- DP3 R2, v[NRML], c[16];
- # Clamp the diffuse component to zero
- MAX R2.x, R2, c[40].xxxx;
-
- # Get the vector from the eye to the vertex
- ADD R4, c[15], -v[OPOS];
-
- # Normalize it
- DP3 R0.w, R4, R4;
- RSQ R0.w, R0.w;
- MUL R4.xyz, R4, R0.w;
-
- # Haze
- DP3 R2.y, v[NRML], R4;
- ADD R2.y, c[40].y, -R2.y;
- MUL o[FOGC].x, R2.x, R2.y;
-
- # Calculate the specular reflection
- MOV R6.x, R2.x;
- DP3 R6.y, c[17], v[NRML];
- MAX R6.y, R6, c[40].x;
- MOV R6.w, c[40].w;
-
- # Output the texture
- MOV o[TEX0], v[TEX0];
- # Output the primary color
- MOV R0, c[32];
- MAD o[COL0], c[20], R2.xxxx, R0;
-
- # Compute and output the secondary color
- LIT R0, R6;
- MUL o[COL1], c[34], R0.zzzz;
- # Output the vertex
- MOV o[HPOS], R1;
-
- END
-
-